#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#include <functional>
#include <vector>

void sch()
{
    std::cout << "process scheduling" << std::endl;
}
void check()
{
    std::cout << "memory check" << std::endl;
}
std::vector<std::function<void()>> task_list;

void handler(int sig)
{
    for (auto &e : task_list)
    {
        e();
    }
    alarm(1);
}
int main()
{
    task_list.push_back(sch);
    task_list.push_back(check);
    signal(14, handler);
    alarm(1);
    while (true)
    {
        pause();
    }
    return 0;
}
// void handler(int sig)
// {
//     std::cout << "recive signal : " << sig << std::endl;
// }
// int main()
// {
//     for(int i = 1;i<32;i++)
//         signal(i,handler);
//     alarm(3);
//     sleep(5);
//     return 0;
// }

// int main()
// {
//     int id = fork();
//     if (id < 0)
//         exit(1);
//     else if (id == 0)
//     {
//         sleep(1);
//         int x = 10;
//         x /= 0;
//     }
//     for (int i = 1; i < 32; i++)
//         signal(i, handler);
//     int status = 0;
//     waitpid(-1, &status, 0);
//     printf("status : %d, exit signal: %d, core dump: %d\n", status, status & 0x7F, (status >> 7) & 1);
//     return 0;
// }

// int main()
// {
//     for(int i = 1; i<32;i++)
//         signal(i, handler);
//     //野指针
//     int* p = nullptr;
//     *p = 1;//访问nullptr
//     // //除0
//     // int x = 3;
//     // x/=0;
//     while(true)
//     {
//     }
//     return 0;
// }

// int main()
// {
//     int x = 0;
//     std::cout << "in begin" << std::endl;
//     std::cin >> x;
//     std::cout << "in sucess" << std::endl;
//     return 0;
// }

// void handler(int sig)
// {
//     std::cout << "receive signal : " << sig << std::endl;
// }

// int main()
// {
//     for(int i = 1; i<32;i++)
//         signal(i,handler);
//     std::cout << "pid : " << getpid() << std::endl;
//     abort();
//     while(1)
//     {
//         sleep(1);
//     }
//     return 0;
// }

// int main()
// {
//     for (int i = 1; i < 32; i++)
//         signal(i, handler);
//     for (int i = 1; i < 32; i++)
//     {
//         if (i == 9 || i == 19)
//             continue;
//         std::cout << "send signal " << i << std::endl;
//         raise(i);
//     }

//     return 0;
// }

// int main()
// {
//     for (int i = 1; i < 32; i++)
//         signal(i, handler);
//     std::cout << "pid : " << getpid() << std::endl;
//     while (true)
//     {
//         sleep(1);
//     }
//     return 0;
// }

// void handler(int sig)
// {
//     std::cout << "receive signal : " << sig << std::endl;
// }

// int main()
// {
//     for (int i = 1; i < 32; i++)
//         signal(i, handler);
//     // signal(2, handler);
//     int cnt = 0;
//     while (true)
//     {
//         printf("cnt : %d, pid : %d\n", cnt++, getpid());
//         sleep(1);
//     }
//     return 0;
// }

// #include <iostream>
// #include <signal.h>
// #include <unistd.h>

// void deal(int sig)
// {
//     std::cout << sig << " can't kill" << std::endl;
// }

// int main()
// {
//     for (int i = 1; i < 32; i++)
//         signal(i, deal);
//     // signal(2, deal);

//     int cnt = 0, id = getpid();
//     while (true)
//     {
//         std::cout << "hello , " << cnt++ << std::endl;
//         sleep(1);
//         abort();
//         // if (cnt != 9 && cnt != 19)
//         //     kill(id, cnt);
//     }
//     return 0;
// }